from warnings import simplefilter
from dataset import *
from utils import *
from model import *
import warnings
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
warnings.filterwarnings("ignore")
simplefilter(action='ignore', category=FutureWarning)

def print_version(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'version from {name}')  # Press Ctrl+F8 to toggle the breakpoint.


coal_and_charge_file = './test/2煤量数据诊断模型-积分数据.xlsx'  #煤耗与负荷数据数据所处位置
remain_day_file = './test/2煤量数据诊断模型-填报数据.xlsx'       #可用天数数据所处位置
# Press the green button in the gutter to run the script.
if __name__ == '__main__':

    print_version('fjw')

    coal_and_charge_data=read_data(coal_and_charge_file)  #获取煤耗量与负荷量的数据
    dict_split_data=obtain_split_data(coal_and_charge_data)  #切分数据，得到每台给煤机与对应负荷量的值
    coal_data,charge_data=get_coal_and_charge(dict_split_data, 2, 1) #分别用数组存储煤耗量与负荷量数据
    #print("数据集中给煤机的煤耗量:",coal_data)
    #print("数据集中给煤机提供的负荷量:",charge_data)

    coal_sum_data=get_sum_data(coal_data, 'coal')   #对煤耗量进行汇总
    charge_sum_data=get_sum_data(charge_data, 'charge')  #对负荷量进行汇总
    coal_sum_data=transformer_data(coal_sum_data)       #对煤耗量进行数据转换
    charge_sum_data = transformer_data(charge_sum_data)  #对负荷量进行数据转换
    merge_data=merge_coal_and_charge(coal_sum_data, charge_sum_data)
    plot_coal_and_charge(merge_data)      #对于数据进行可视化
    #进行有监督和无监督的异常检测算法
    index=model(merge_data, "test", "KNN",1500,2000,0.001)    #模型的选择以及阈值的设定，并且需要设定是在训练数据集还是测试数据集，得到异常点的位置信息
    print(len(index))

    available_data=read_available_data(remain_day_file)  #数据的读取
    #merge_normalize_data, normalize = NormalizeMult(available_data)    #归一化处理，数据比较简单决定不采用
    y_predict=model_predict_day(available_data, 'test', 'lstm', verbose=False, window=5)  #进行有效天数的预测算法
    predict_days_warning(available_data, y_predict, 'test', 5, 0.8)    #根据相关阈值启动报警装置